/**
 * 给定M趟车的时刻表。每趟车从Ai到Bi，出发时间是Si，到站时间是Ti
 * 现在第1趟车晚点了X时间。问其他车要晚点多少才能维持原来的运行图
 * 暴力的话
 * for i in M:
 *     假设第i趟车的终到时间是Ti，到站是Bi
 *     for j in 所有起点为Bi的:
 *         如果j的出发时间大于Ti，则j需要晚点max(0, Ti + X - Sj)
 * 这样的话是最差时间复杂度是O(M^2)。
 * 需要优化建图方案。总的方向是按照时间排序。但是没想清楚。
 * 考虑另一种思考路径，对于每一个站点维护一个最晚到站时刻，这个时间由不同的车次生成，但是该时刻不会对之前的车次与时刻产生影响
 * 对于每一列车，根据它出发时的起点的当时最晚时刻，决定其延迟时间，因为之后的最晚到站对其没有影响。
 * 因此对三元组(时间，类型，站点)，进行排序
 * 时间小的靠前，到达时间靠前，站点小的靠前
 * 因为时间靠后的到达时间肯定无法影响更靠前的出发时间，只看影响其后的或者同时的出发时间
 * 令Ans[i]为第i列车的延迟时间，Last[i]为站i的最晚到站时刻 
 * 依次处理每一个三元组：
 *    本列车次记作j，如果是t时刻到达i站，更新i的最晚到站时间，显然有
 *        Last[i] = max(Last[i], t + Ans[j])
 *    本列车次记作j，如果是t时刻从i站出发，更新j的晚点时间，显然有
 *         Ans[j] = max(Ans[j], Last[i] - t)
 * 如此处理保证能得到答案，实际上是一个隐形的拓扑排序
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;


int N, M;
llt X;
vi A, B;
vll S, T;

struct _t{
    llt time;
    int type;
    int index;
};

vector<_t> Vec;
vll Ans;
vll Last;

void work(){
    cin >> N >> M >> X;
    A.assign(M + 1, {});
    B.assign(M + 1, {});
    S.assign(M + 1, {});
    T.assign(M + 1, {});
    for(int i=1;i<=M;++i){
        cin >> A[i] >> B[i] >> S[i] >> T[i];
        Vec.push_back({S[i], 0, i});
        Vec.push_back({T[i], 1, i});
    }

    sort(Vec.begin(), Vec.end(), [](const _t & a, const _t & b)->bool{
        if(a.time != b.time) return a.time < b.time;
        if(a.time != b.type) return a.type > b.type;
        return a.index < b.index;
    });

    Ans.assign(M + 1, 0);
    Last.assign(N + 1, 0);
    Ans[1] = X;
    for(const auto & t : Vec){
        if(0 == t.type){
            if(t.index != 1){
                int pos = A[t.index];
                Ans[t.index] = max(Ans[t.index], Last[pos] - t.time);    
                
            }
        }else{
            int pos = B[t.index];
            Last[pos] = max(Last[pos], t.time + Ans[t.index]);
        }
    }
    for(int i=2;i<=M;++i) cout << Ans[i] << " ";
    cout << endl;
    return;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}